最近正好在處理醫學影像,拿到的資料是醫師圈好病灶位置的影像遮罩(mask),希望能夠抓出病灶區域的外框 (bounding box) 當作訓練資訊,而病灶區域也就是這邊的ROI(region of interest)。
主要使用到的是 opencv 裡面的函數:cv2.findContours
和 cv2.boundingRect
這邊另外應用到 d2l 套件中的 axes.add_patch
在原本的圖像上另外畫出東西
import cv2
import d2l
# 設定輸入的影像路徑,並讀檔
path = "path to the mask in .png format"
mask = cv2.imread(path, cv2.IMREAD_GRAYSCALE)
# cv2.findContours: 找到ROI的輪廓
contours, hierarchy = cv2.findContours(mask, cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE)
color = ['red', 'green']
fig = d2l.plt.imshow(mask, cmap='gray')
for i in range(0, len(contours)):
# cv2.boundingRect: 透過輪廓找到外接矩形
# 輸出:(x, y)矩形左上角座標、w 矩形寬(x軸方向)、h 矩形高(y軸方向)
x, y, w, h = cv2.boundingRect(contours[i])
# 在原影像上繪製出矩形
fig.axes.add_patch(d2l.plt.Rectangle((x, y), w, h, fill=False,
linestyle="-", edgecolor=color[i],
linewidth=2))
如果有任何問題歡迎留言討論~
這篇分享的資訊如果對你有幫助,也歡迎按讚、留言讓我知道~